<?php

namespace App\Http\Controllers\Admin;



use App\Models\Order;
use App\Models\User;

use Egulias\EmailValidator\Warning\Comment;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Log;
use Yansongda\Pay\Pay;


class PayController extends Controller
{
    public function pay(Request $request)
    {
        $request->validate([
            'type' => 'required|in:aliyun,wechat',
        ], [
            'type.required' => '支付类型 不能为空',
            'type.in' => '支付类型 只能是 aliyun wechat'
        ]);
        // TODO 如果订单状态不是1，不能下单
//        if ($order->status !=1){
//            return $this->response->errorBadRequest('订单状态异常,请重新下单');
//        }
        if ($request->input('type') == 'aliyun') {

            //TODO 测试数据,订单表有数据后在补
            $orders = [
                'out_trade_no' => 1234568, //我方生成的订单号
                'total_amount' => 458522 / 100,//订单总金额
                'subject' => '这是测试的数据', //额外的数据

            ];
            //判断用户登录的类型
             $login_type = UserLoginLog::where('user_id',auth('api')->user())->first();
             $login_type = $request->header('user_agent');

            if ($login_type->login_type == 'app'){
                //app支付
                return Pay::alipay()->app($orders);
            }
            if ($login_type->login_type == 'applet'){
                //小程序支付
                return Pay::alipay()->mini($orders);
            }
            if ($login_type->login_type  == 'h5'){
                //h5支付
                return Pay::alipay()->wap($orders);
            }

        }
        if ($request->input('type') == 'wechat') {
            //TODO 测试数据,订单表有数据后在补
            $order = [
                'out_trade_no' => 1234568, //我方生成的订单号
                'total_amount' => 458522 / 100,//订单总金额
                'subject' => '这是测试的数据', //额外的数据

            ];
            $login_type = UserLoginLog::where('user_id',1)->first(); //先写死后期会从用户登录用户中取
//              $login_type = $request->header('user_agent');

            if ($login_type->login_type == 'app'){
                //app支付
                return Pay::alipay()->app($order);
            }
            if ($login_type->login_type == 'applet'){
                //小程序支付
                return Pay::alipay()->mini($order);
            }
            if ($login_type->login_type  == 'h5'){
                //h5支付
                return Pay::alipay()->wap($order);
            }
        }

    }

    public function notifyAliyun(Request $request)
    {
        $alipay = Pay::alipay();

        try {
            $data = $alipay->verify(); // 是的，验签就这么简单！

            // 请自行对 trade_status 进行判断及其它逻辑进行判断，在支付宝的业务通知中，只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时，支付宝才会认定为买家付款成功。
            // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号；
            // 2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额）；
            // 3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）；
            // 4、验证app_id是否为该商户本身。
            // 5、其它业务逻辑情况
            //判断支付状态
            if ($data->trade_status == 'TRADE_SUCCESS ' || $data->trade_status == 'TRADE_FINISHED') {
                // 查询订单
//                $order = Order::where('order_on', $data->out_trade_no)->first();

                // TODO 更新订单
//                $order->update([
//                    'status' => 2, //订单状态
//                    'pay_time' => $data->gmt_payment, //支付时间
//                    'pay_type' => '支付宝', //支付类型
//                    'trade_on' => $data->trade_on //支付宝生成的订单号
//                ]);
            }
            Log::debug('Alipay notify', $data->all());

        } catch (\Exception $e) {
            // $e->getMessage();
        }

        return $alipay->success();
    }


    /**
     * 微信支付成功之后的回调
     */
    public function notifyWechat(Request $request)
    {
        $wechat = Pay::wechat();

        try{
            $data = $wechat->verify(); // 是的，验签就这么简单！

            Log::info($data);

            // 判断支付状态
            if ($data->return_code == 'SUCCESS') {

//                //TODO 查询订单
//                $order = Order::where('order_no', $data->out_trade_no)->first();

                //TODO 更新订单数据
//                $order->update([
//                    'status' => 2,
//                    'pay_time' => now(),
//                    'pay_type' => '微信',
//                    'trade_no' => $data->transaction_id
//                ]);
            }

            Log::debug('Wechat notify', $data->all());
        } catch (\Exception $e) {
            // $e->getMessage();
        }

        return $wechat->success();// laravel 框架中请直接 `return $alipay->success()`
    }
}
